package avicit.bdp.dms.tdm.dao;

import avicit.bdp.dms.tdm.dto.BdpAssetCatalogDTO;
import avicit.bdp.dms.tdm.utils.annotation.MultiOrgFilter;
import com.github.pagehelper.Page;
import java.util.List;
import org.apache.ibatis.annotations.Param;

/** 数据共享_供需目录Dao */
public interface BdpAssetCatalogDAO {

    /**
   * 按照父id查询子节点
   *
   * @param id 父id
   * @param orgIdentity 组织id
   */
  @MultiOrgFilter(orgIdentityColumnName = "org_identity")
  List<BdpAssetCatalogDTO> findChildrenById(
      @Param("id") String id, @Param("orgIdentity") String orgIdentity);

  /**
   * 按照父id查询子节点（查询有效数据）
   *
   * @param id 父id
   * @param status 状态
   * @param orgIdentity 组织id
   */
  @MultiOrgFilter(orgIdentityColumnName = "org_identity")
  List<BdpAssetCatalogDTO> findValidChildrenById(
      @Param("id") String id,
      @Param("status") String status,
      @Param("orgIdentity") String orgIdentity);

  /**
   * 按照父id查询父节点
   *
   * @param id 父id
   * @param orgIdentity 组织id
   */
  @MultiOrgFilter(orgIdentityColumnName = "org_identity")
  BdpAssetCatalogDTO findParentById(
      @Param("id") String id, @Param("orgIdentity") String orgIdentity);

  /**
   * 分页查询
   *
   * @param bean 查询对象
   * @param orgIdentity 组织id
   * @param wordSecret 文档密级
   * @param orderBy 排序条件
   * @param keyWords 查询关键字
   */
  @MultiOrgFilter(orgIdentityColumnName = "org_identity")
  Page<BdpAssetCatalogDTO> searchByPage(
      @Param("bean") BdpAssetCatalogDTO bean,
      @Param("orgIdentity") String orgIdentity,
      @Param("wordSecret") String wordSecret,
      @Param("orderBy") String orderBy,
      @Param("keyWords") String keyWords);

  /**
   * 根据条件查询节点
   *
   * @param bean 查询对象
   * @param orgIdentity 组织id
   * @param wordSecret 文档密级
   * @param keyWords 查询关键字
   */
  @MultiOrgFilter(orgIdentityColumnName = "org_identity")
  List<BdpAssetCatalogDTO> searchList(
      @Param("bean") BdpAssetCatalogDTO bean,
      @Param("orgIdentity") String orgIdentity,
      @Param("wordSecret") String wordSecret,
      @Param("keyWords") String keyWords);

  /**
   * 按主键查询
   *
   * @param id 主键id
   */
  BdpAssetCatalogDTO findById(String id);

  /**
   * 按ID串查询
   *
   * @param ids 主键id串
   */
  List<BdpAssetCatalogDTO> findByIds(String ids);

  /**
   * 按treePath查询
   *
   * @param treePath tree path
   */
  List<BdpAssetCatalogDTO> findByTreePath(@Param("treePath") String treePath);

  /**
   * 新增
   *
   * @param tree 保存对象
   */
  int insert(BdpAssetCatalogDTO tree);

  /**
   * 更新对象
   *
   * @param tree 更新对象
   * @return int
   */
  int updateSensitive(BdpAssetCatalogDTO tree);

  /**
   * 更新对象
   *
   * @param tree 更新对象
   * @return int
   */
  int updateAll(BdpAssetCatalogDTO tree);

  /**
   * 批量更新对象
   *
   * @param dtoList 批量更新对象集合
   * @return int
   */
  int batchUpdate(@Param("dtoList") List<BdpAssetCatalogDTO> dtoList);

  /**
   * 按主键删除
   *
   * @param id 主键id
   * @return int
   */
  int deleteById(String id);

  /**
   * 查询当前父节点下，子节点中最大的treeSort值
   *
   * @param parentId parentId
   */
  Long findMaxTreeSortByParentId(String parentId);

  /**
   * @param bean 查询对象
   * @param orgIdentity 组织标识
   * @param wordSecret 密级
   * @return 唯一性校验接口
   */
  @MultiOrgFilter(orgIdentityColumnName = "org_identity")
  List<BdpAssetCatalogDTO> uniqueCheck(
      @Param("bean") BdpAssetCatalogDTO bean,
      @Param("orgIdentity") String orgIdentity,
      @Param("wordSecret") String wordSecret);

  List<BdpAssetCatalogDTO> getList(
      @Param("parentId") String parentId, @Param("idList") List<String> idList);

  BdpAssetCatalogDTO getRootNode();

  BdpAssetCatalogDTO findByClassifyName(@Param("classifyName") String classifyName);

  BdpAssetCatalogDTO findByClassifyCode(@Param("classifyCode") String classifyCode);

  List<BdpAssetCatalogDTO> getAllTree();

  List<BdpAssetCatalogDTO> searchCatalogList(@Param("orgIds") String orgIds,
                                             @Param("wordSecret") String wordSecret);

  BdpAssetCatalogDTO getParent();
}
